#ifndef MYREFCOUNT_H_
#define MYREFCOUNT_H_
//#define NULL 0
//
//template <typename T> class MyRefCount {
//private:
//
//	T* m_dataPtr; // pointer to object of type T
//	/***************************************************************************************
//	* function name: MyAuto_ptr(T* data = NULL)
//	* The Input: Pointer to T object. Default value is NULL
//	* The output: None
//	* The Function operation: Creates a new MyAuto_ptr object pointing at given T object
//	***************************************************************************************/
//	MyRefCount(T* data = NULL) {m_dataPtr = data;}
//
//	/***************************************************************************************
//	* function name: MyAuto_ptr(const MyAuto_ptr& ptrToCopy)
//	* The Input: MyAuto_ptr object to be copied
//	* The output: None
//	* The Function operation: Creates a new MyAuto_ptr object pointing at given pinter's T object
//	***************************************************************************************/
//	MyRefCount(const MyRefCount& ptrToCopy) {m_dataPtr = ptrToCopy.m_dataPtr;} // TODO DEBUG!!!
//
//	/***************************************************************************************
//	* function name: ~MyAuto_ptr()
//	* The Input: None
//	* The output: None
//	* The Function operation: Deletes pointed data
//	***************************************************************************************/
//	~MyRefCount();
//
//	/***************************************************************************************
//	* function name: MyAuto_ptr<T>& operator=(MyAuto_ptr<T>& otherPtr)
//	* The Input: MyAuto_ptr object that its value should be assigned
//	* The output: Reference to activating object
//	* The Function operation: Deletes pointed data, sets m_dataPtr to given MyAuto_ptr's
//	* 						  pointed data and sets given pointer's to NULL
//	***************************************************************************************/
//	MyAuto_ptr<T>& operator=(MyAuto_ptr<T>& otherPtr) {
//		if (this != &otherPtr) { // check if not self assignment
//			delete m_dataPtr; // delete pointed data
//			m_dataPtr = otherPtr.m_dataPtr; // point at given pointer's data
//			otherPtr.m_dataPtr = NULL; // set given pointer's data to NULL
//		}
//		return *this; // return reference to activating object
//	}
//
//	/***************************************************************************************
//	* function name: T& operator*() const
//	* The Input: None
//	* The output: Reference to pointed T object
//	* The Function operation: Returns pointed value by T data pointer attribute.
//	* 				          Method does not chagne the object
//	***************************************************************************************/
//	T& operator*() const {return *m_dataPtr;}
//
//	/***************************************************************************************
//	* function name: T* getPointer() const
//	* The Input: None
//	* The output: Pointer to the T object
//	* The Function operation: Returns T data pointer attribute.
//	* 				          Method does not chagne the object
//	***************************************************************************************/
//	T* getPointer() const {return m_dataPtr;}
//};

#endif
